/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.upn.sigemfi.seg.beans;

import edu.upn.sigemfi.seg.bc.DepartamentoDelegate;
import edu.upn.sigemfi.seg.bc.DistritoDelegate;
import edu.upn.sigemfi.seg.bc.ProvinciaDelegate;
import edu.upn.sigemfi.seg.be.Agencia;
import edu.upn.sigemfi.seg.be.Departamento;
import edu.upn.sigemfi.seg.be.Distrito;
import edu.upn.sigemfi.seg.be.Provincia;
import java.util.List;
import javax.faces.model.SelectItem;

/**
 *
 * @author Administrador
 */
public class UbigeoController extends AbstractController {

    private DepartamentoDelegate delegadoDepartamento;
    private ProvinciaDelegate delegadoProvincia;
    private DistritoDelegate delegadoDistrito;
    private Departamento departamento;
    private Provincia provincia;

    public UbigeoController() {
        delegadoDepartamento = new DepartamentoDelegate();
        delegadoProvincia = new ProvinciaDelegate();
        delegadoDistrito = new DistritoDelegate();
    }

    public SelectItem[] getDepartamentos() {
        SelectItem[] select = null;
        try {
            List<Departamento> lista = delegadoDepartamento.listar();
            if (lista != null) {
                select = new SelectItem[lista.size() + 1];
                int i = 0;
                select[i++] = new SelectItem(null, "<<Seleccione un departamento>>");
                for (Departamento d : lista) {
                    select[i++] = new SelectItem(d, d.getNomDepartamento());
                }
            } else {
                select = new SelectItem[1];
                select[0] = new SelectItem(null, "<<No existen departamentos>>");
            }
        } catch (Exception e) {
            select = new SelectItem[1];
            select[0] = new SelectItem(null, "<<Error al momento de obtener los datos>>");
            error(e.getMessage());
        }
        return select;
    }

    public SelectItem[] getProvincias() {
        SelectItem[] select = null;
        try {
            if (departamento != null) {
                List<Provincia> lista = departamento.getProvincias();
                if (lista != null) {
                    select = new SelectItem[lista.size() + 1];
                    int i = 0;
                    select[i++] = new SelectItem(null, "<<Seleccione una provincia>>");
                    for (Provincia p : lista) {
                        select[i++] = new SelectItem(p, p.getNomProvincia());
                    }
                } else {
                    select = new SelectItem[1];
                    select[0] = new SelectItem(null, "<<No existen provincias>>");
                }
            } else {
                select = new SelectItem[1];
                select[0] = new SelectItem(null, "<<Seleccione un departamento>>");
            }
        } catch (Exception e) {
            select = new SelectItem[1];
            select[0] = new SelectItem(null, "<<Error al momento de obtener los datos>>");
            error(e.getMessage());
        }
        return select;
    }

    public SelectItem[] getDistritos() {
        SelectItem[] select = null;
        try {
            if (departamento != null && provincia != null) {
                List<Distrito> lista = provincia.getDistritos();
                if (lista != null) {
                    select = new SelectItem[lista.size() + 1];
                    int i = 0;
                    select[i++] = new SelectItem(null, "<<Seleccione un distrito>>");
                    for (Distrito d : lista) {
                        select[i++] = new SelectItem(d, d.getNomDistrito());
                    }
                } else {
                    select = new SelectItem[1];
                    select[0] = new SelectItem(null, "<<No existen distritos>>");
                }
            } else {
                select = new SelectItem[1];
                select[0] = new SelectItem(null, "<<Seleccione una provincia>>");
            }
        } catch (Exception e) {
            select = new SelectItem[1];
            select[0] = new SelectItem(null, "<<Error al momento de obtener los datos>>");
            error(e.getMessage());
        }
        return select;
    }

    public Departamento buscarDepartamento(String codigo) {
        try {
            return delegadoDepartamento.buscar(codigo);
        } catch (Exception e) {
            error(e.getMessage());
        }
        return null;
    }

    public Provincia buscarProvincia(String codigo) {
        try {
            return delegadoProvincia.buscar(codigo);
        } catch (Exception e) {
            error(e.getMessage());
        }
        return null;
    }

    public Distrito buscarDistrito(String codigo) {
        try {
            return delegadoDistrito.buscar(codigo);
        } catch (Exception e) {
            error(e.getMessage());
        }
        return null;
    }

    public Departamento getDepartamento() {
        return departamento;
    }

    public void setDepartamento(Departamento departamento) {
        this.departamento = departamento;
    }

    public Provincia getProvincia() {
        return provincia;
    }

    public void setProvincia(Provincia provincia) {
        this.provincia = provincia;
    }
}
